package pms.dao;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import pms.om.Urlaubsanspruch;

public class UrlaubsanspruchDao extends HibernateDaoSupport	{
	
 	/**
	 * R&uuml;ckgabe eines Urlaubsanspruch anhand seiner id
	 * @param id
	 */
	
	public Urlaubsanspruch findById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Urlaubsanspruch) template.get(Urlaubsanspruch.class, id);
	}
	
	/**
	 * R&uuml;ckgabe aller Urlaubanspr&uuml;che
	 */
	
	@SuppressWarnings("unchecked")
	public Set<Urlaubsanspruch> findAll() {
		HibernateTemplate template = getHibernateTemplate();
		List<Urlaubsanspruch> alleurlaubsansprueche = template.loadAll(Urlaubsanspruch.class);
		Set<Urlaubsanspruch> results = new HashSet<Urlaubsanspruch>();
		for (Urlaubsanspruch urlaubsanspruch : alleurlaubsansprueche) {
			results.add(urlaubsanspruch);			
		}
		return results;
	}
	
	/**
	 * l&ouml;sche Urlaubseintrag mit bestimmter id
	 * @param id
	 */
	
	public void deleteById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		Urlaubsanspruch u = findById(id);
		template.delete(u); 
		template.flush();
	}
	
	/**
	 * R&uuml;ckgabe des Set weniger des Urlaubsanspruches u
	 * @param u
	 * @param uset
	 */
	
	private Set<Urlaubsanspruch> findAllbisaufEinen(Urlaubsanspruch u, Set<Urlaubsanspruch> uset) {
		Set<Urlaubsanspruch> result = new HashSet<Urlaubsanspruch>();
    	for (Urlaubsanspruch urlaubsanspruch : uset) {
    		if (!urlaubsanspruch.equals(u)) {
    			result.add(urlaubsanspruch);
    		}	 
    	}
		return result;
	}
	
	/**
	 * &Uuml;bergabe Urlaubsset aller vorhandenen Urlaubssets weniger den &uuml;bergebenen
	 * @param uset
	 */
	
	public Set<Urlaubsanspruch> getRestUrlaubsanspruechewenigerdemSet(Set<Urlaubsanspruch> uset) {
		Set<Urlaubsanspruch> usetresult = findAll();
		for (Urlaubsanspruch urlaubsanspruch : uset) {
			usetresult = findAllbisaufEinen(urlaubsanspruch, usetresult);			
		}
		// in usetresult stehen nun alle Urlaubsansprueche ohne die Urlaubsanspruche die übergeben wurden
		return usetresult;
	}

}
